/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ivanbiz.service;

import com.ivanbiz.dao.AksesMatrixDAO;
import com.ivanbiz.dao.impl.AksesMatrixDAOImpl;
import com.ivanbiz.model.AksesMatrix;
import com.ivanbiz.model.Pengguna;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Div;
import org.zkoss.zul.Menuitem;
import org.zkoss.zul.Window;

/**
 *
 * @author iw20149x
 */
public class MainService extends SelectorComposer<Component> {

    @Wire
    Window menu;
    @Wire
    Div contentDiv;
    List<AksesMatrix> listAksesMatrix;
    AksesMatrixDAO aksesMatrixDAO;
    @Wire
    Menuitem menuPengajar;
    @Wire
    Menuitem menuMurid;
    @Wire
    Menuitem menuKelas;
    @Wire
    Menuitem menuBank;
    @Wire
    Menuitem menuPerusahaan;
    @Wire
    Menuitem menuAccount;
    @Wire
    Menuitem menuGroup;
    @Wire
    Menuitem menuPengguna;
    @Wire
    Menuitem menuPassword;
    @Wire
    Menuitem menuTagihan;
    @Wire
    Menuitem menuPembayaranTagihan;
    @Wire
    Menuitem menuPembayaranLainLain;
    @Wire
    Menuitem menuKelulusan;
    @Wire
    Menuitem menuSaldoKas;
    @Wire
    Menuitem menuReturTagihan;
    @Wire
    Menuitem menuTagihanLaporan;
    @Wire
    Menuitem menuPembayaranTagihanLaporan;
    @Wire
    Menuitem menuPembayaranLainLainLaporan;
    @Wire
    Menuitem menuLaporanJurnal;
    @Wire
    Menuitem menuLaporanKelulusan;
    @Wire
    Menuitem menuLaporanSaldoKas;
    @Wire
    Menuitem menuLaporanKeuntunganKreditur;
    @Wire
    Menuitem menuKeuntunganLaporanBiayaLain;
    @Wire
    Menuitem menuReconsile;
    @Wire
    Menuitem tutup;
    Pengguna pengguna;

    @Override
    public void doAfterCompose(Component component) throws Exception {
        super.doAfterCompose(component);
        aksesMatrixDAO = new AksesMatrixDAOImpl();
        pengguna = (Pengguna) Executions.getCurrent().getArg().get("pengguna");
        renderMenu();
        menu.setTitle("GPS -> Selamat Datang " + pengguna.getUserName());
    }

    @Listen("onClick=#menuReconsile;")
    public void menuReconsile() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/laporanReconsile.zul", contentDiv, null);
    }

    @Listen("onClick=#menuLaporanJurnal;")
    public void menuLaporanJurnal() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/laporanJurnal.zul", contentDiv, null);
    }

    @Listen("onClick=#menuLaporanKelulusan;")
    public void menuLaporanKelulusan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/laporanKelulusan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuLaporanSaldoKas;")
    public void menuLaporanSaldoKas() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/laporanSaldoKas.zul", contentDiv, null);
    }

    @Listen("onClick=#menuLaporanKeuntunganKreditur;")
    public void menuLaporanKeuntunganKreditur() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/laporanKeuntunganKreditur.zul", contentDiv, null);
    }

    @Listen("onClick=#menuKeuntunganLaporanBiayaLain;")
    public void menuKeuntunganLaporanBiayaLain() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/keuntunganLaporanBiayaLain.zul", contentDiv, null);
    }

    @Listen("onClick=#menuBank;")
    public void menuBank() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/bank.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPembayaranTagihanLaporan;")
    public void menuPembayaranTagihanLaporan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/pembayaranTagihanLaporan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPembayaranLainLainLaporan;")
    public void menuPembayaranLainLainLaporan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/pembayaranLainLainLaporan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuReturTagihan;")
    public void menuReturTagihan() {
        contentDiv.getChildren().clear();
        Window win = (Window) Executions.createComponents("/returTagihan.zul", contentDiv, null);
        win.doModal();
    }

    @Listen("onClick=#menuSaldoKas;")
    public void menuSaldoKas() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/saldoKas.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPembayaranLainLain;")
    public void menuPembayaranLainLain() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/pembayaranLainLain.zul", contentDiv, null);
    }

    @Listen("onClick=#menuKelulusan;")
    public void menuKelulusan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/kelulusan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuTagihan;")
    public void menuTagihan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/tagihan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPembayaranTagihan;")
    public void menuPembayaranTagihan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/pembayaranTagihan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuKelas;")
    public void menuKelas() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/kelas.zul", contentDiv, null);
    }

    @Listen("onClick=#menuAccount;")
    public void menuAccount() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/account.zul", contentDiv, null);
    }

    @Listen("onClick=#menuBuatJadwalKelas;")
    public void menuBuatJadwalKelas() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/jadwalKelas.zul", contentDiv, null);
    }

    @Listen("onClick=#menuMurid;")
    public void menuMurid() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/murid.zul", contentDiv, null);
    }

    @Listen("onClick=#menuTagihanLaporan;")
    public void menuTagihanLaporan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/tagihanLaporan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPerusahaan;")
    public void menuPerusahaan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/perusahaan.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPengguna;")
    public void menuPengguna() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/pengguna.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPengajar;")
    public void menuPengajar() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/pengajar.zul", contentDiv, null);
    }

    @Listen("onClick=#menuPassword;")
    public void menuPassword() {
        contentDiv.getChildren().clear();
        Map map = new HashMap();
        map.put("pengguna", pengguna);
        Window win = (Window) Executions.createComponents("/password.zul", contentDiv, map);
        win.doModal();
    }

    @Listen("onClick=#daftarKelasLaporan;")
    public void daftarKelasLaporan() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/daftarKelasLaporan.zul", contentDiv, null);
    }

    @Listen("onClick=#keluar;")
    public void keluar() {
        contentDiv.getChildren().clear();
        menu.detach();
        menu.getChildren().clear();
        Sessions.getCurrent().removeAttribute("pengguna");
        Sessions.getCurrent().removeAttribute("perusahaan");
        Executions.createComponents("/index.zul", null, null);
    }

    @Listen("onClick=#tutup;")
    public void tutup() {
        contentDiv.getChildren().clear();
        menu.detach();
        menu.getChildren().clear();
        Sessions.getCurrent().removeAttribute("pengguna");
        Sessions.getCurrent().removeAttribute("perusahaan");
    }

    @Listen("onClick=#menuGroup;")
    public void menuGroup() {
        contentDiv.getChildren().clear();
        Executions.createComponents("/group.zul", contentDiv, null);
    }

    private void renderMenu() throws Exception {
        listAksesMatrix = aksesMatrixDAO.getDataByEquals(AksesMatrix.class, "groups.id", pengguna.getGroups().getId());
        menuPengajar.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_PENGAJAR, listAksesMatrix));
        menuMurid.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_MURID, listAksesMatrix));
        menuKelas.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_KELAS, listAksesMatrix));
        menuBank.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_BANK, listAksesMatrix));
        menuPerusahaan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_PERUSAHAAN, listAksesMatrix));
        menuAccount.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_GLACCOUNT, listAksesMatrix));
        menuGroup.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_GROUP, listAksesMatrix));
        menuPengguna.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_PENGGUNA, listAksesMatrix));
        menuPassword.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_PASSWORD, listAksesMatrix));
        menuTagihan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_TAGIHAN, listAksesMatrix));
        menuPembayaranTagihan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_PEMBAYARAN_TAGIHAN, listAksesMatrix));
        menuKelulusan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_KELULUSAN, listAksesMatrix));
        menuPembayaranLainLain.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_PEMBAYARAN_LAIN, listAksesMatrix));
        menuSaldoKas.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.LIHAT_SALDO_KAS, listAksesMatrix));
        menuReturTagihan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.RETUR_TAGIHAN, listAksesMatrix));
        menuTagihanLaporan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_TAGIHAN, listAksesMatrix));
        menuPembayaranTagihanLaporan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_PEMBAYARAN_TAGIHAN, listAksesMatrix));
        menuPembayaranLainLainLaporan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_PEMBAYARAN_LAIN, listAksesMatrix));
        menuLaporanJurnal.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_JURNAL, listAksesMatrix));
        menuLaporanKelulusan.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_KELULUSAN, listAksesMatrix));
        menuLaporanSaldoKas.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_SALDO_KAS, listAksesMatrix));
        menuLaporanKeuntunganKreditur.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_KEUNTUNGAN, listAksesMatrix));
        menuKeuntunganLaporanBiayaLain.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_KEUNTUNGAN_BIAYA_LAIN, listAksesMatrix));
        menuReconsile.setDisabled(MenuAksesConstant.validateMenu(MenuAksesConstant.REPORT_RECONSILE, listAksesMatrix));
    }
}
